#include<stdio.h>
#include<stdlib.h>
#include "els.h"
#define ELS_VERSION	"洛书中文编程 LPK v1.6.3-rc2 Kernel by Easylosu 1.2.2-beta"
#define ELS_COPYRIGHT	"Copyright (C) 2022-2023 easylosu@lists.openkylin.top"
#define ELS_AUTHORS 	"Chen-Chaochen,Guo-Yichen,Ma-Ming"
extern int maxsize,subsize;
int els_argc;
char **els_argv;


const char inlinestd_eng[]={"\
Std = { \n\
    libfile = './libstd.lsd', \n\
    type    = { \n\
                '用户数据', \n\
                '空', \n\
                '数字', \n\
                '字符串', \n\
                '组', \n\
                '方法', \n\
                } \n\
} \n\
def print(a) \n\
    call(Std.libfile,'Els_STD_print',a) \n\
; \n\
def input() \n\
    rt call(Std.libfile,'Els_STD_input') \n\
; \n\
def lineinput() \n\
    rt call(Std.libfile,'Els_STD_lineinput') \n\
; \n\
def val(a) \n\
    rt call(Std.libfile,'Els_STD_val',a) \n\
; \n\
def str(a) \n\
    rt call(Std.libfile,'ELs_STD_str',a) \n\
; \n\
def int(a) \n\
    rt call(Std.libfile,'Els_STD_int',a) \n\
; \n\
def md5(a) \n\
    rt call(Std.libfile,'losu_md5_sum',a) \n\
; \n\
def type(a) \n\
    rt Std.type[1-call(Std.libfile,'Els_STD_type',a)] \n\
; \n\
def exit(a) \n\
    rt call(Std.libfile,'Els_STD_exit',a) \n\
; \n\
 \n\
 \n\
\
"};

const char inlinestd_cn[]={"\
标准库 = { \n\
    库文件 = './libstd.lsd', \n\
    数据类型    = { \n\
                '用户数据', \n\
                '空', \n\
                '数字', \n\
                '字符串', \n\
                '组', \n\
                '方法', \n\
                } \n\
} \n\
方法 打印(a) \n\
    库(标准库.库文件,'Els_STD_print',a) \n\
; \n\
方法 输入() \n\
    回 库(标准库.库文件,'Els_STD_input') \n\
; \n\
方法 输入一行() \n\
    回 库(标准库.库文件,'Els_STD_lineinput') \n\
; \n\
方法 数值化(a) \n\
    回 库(标准库.库文件,'Els_STD_val',a) \n\
; \n\
方法 字符化(a) \n\
    回 库(标准库.库文件,'ELs_STD_str',a) \n\
; \n\
方法 加密(a) \n\
    回 库(标准库.库文件,'losu_md5_sum',a) \n\
; \n\
方法 整数化(a) \n\
    回 库(标准库.库文件,'Els_STD_int',a) \n\
; \n\
方法 数据类型(a) \n\
    回 标准库.数据类型[1-库(标准库.库文件,'Els_STD_type',a)] \n\
; \n\
方法 退(a) \n\
    回 库(标准库.库文件,'Els_STD_exit',a) \n\
; \n\
 \n\
\
"};



int els_getargv (els_VmObj *l){
    if (!els_isnum(l,1)) els_pushnull(l);
    else{
        int n = (int)els_getnum(l,1);
        if (n > els_argc-2) els_pushstr(l,"");
        else els_pushstr(l,els_argv[n+1]);
    }
    return 1;
}
int els_getargc (els_VmObj *l){
    els_pushnum(l,els_argc-2);
    return 1;
}



int main (int argc, char **argv){
    els_VmObj *l=els_createvm(512);
    int s;
    els_argc = argc;
    els_argv = argv;
    #ifdef ELS_LANG_CN
    els_register(l,"参数", els_getargv);
    els_register(l,"参数个数", els_getargc);
    #endif
    
    #ifdef ELS_LANG_EN
    els_register(l,"argv", els_getargv);
    els_register(l,"argc", els_getargc);
    #endif

    els_lib_init(l);
    if (argc < 2){
        printf("%s\n%s\nCreated by\t%s\n",ELS_VERSION, ELS_COPYRIGHT, ELS_AUTHORS);
        return 0;
    }else{
        #ifdef ELS_LANG_CN
            els_dostring(l,inlinestd_cn);
        #endif
        #ifdef ELS_LANG_EN
            els_dostring(l,inlinestd_eng);
        #endif
        s =  els_dofile (l,argv[1]);
    }
    els_closevm(l);
    return s;
}